﻿<!DOCTYPE html>
<html>
<head>
    <title>Подключение устройств по протоколу Modbus - Документация Rapid SCADA</title>
	<meta charset="utf-8" />
    <link href="../../../css/scadadoc.min.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="../../../js/jquery.min.js"></script>
    <script type="text/javascript" src="../../../js/scadadoc.js"></script>
</head>
<body>
    <h1>Подключение устройств по протоколу Modbus</h1>

    <p class="sd-article-meta">
        Автор Rapid SCADA, 10 мая 2012<br />
        Обновление 16 октября 2017
    </p>

    <p>На рынке представлено огромное количество устройств, работающих в самых разных областях автоматизации, которые поддерживают обмен данными по протоколу <a href="https://ru.wikipedia.org/wiki/Modbus" target="_blank">Modbus</a>. Modbus - это открытый коммуникационный протокол, использующий клиент-серверную модель, основанную на транзакциях, состоящих из запроса и ответа. Реализация поддержки протокола Modbus комплексом Rapid SCADA на порядок расширяет перечень устройств, с которыми может работать комплекс. Поддерживаются следующие режимы передачи данных: RTU, ASCII, TCP.</p>

    <p>Общая последовательность настройки:</p>

    <ol>
        <li>Создать соответствующий объект, линию связи и КП в базе конфигурации с помощью программы Администратор.</li>
        <li>Настроить обмен данными между Коммуникатором и устройствами.</li>
        <li>С помощью Администратора создать входные каналы в базе конфигурации, соответствующие элементам Modbus (элементы также называются переменными или тегами). Создать каналы управления, соответствующие командам.</li>
        <li>Создать одно или несколько представлений (таблиц или схем) для отображения информации в приложении Вебстанция. Прописать представления в базе конфигурации.</li>
    </ol>

    <p>Далее приводится пошаговое описание подключения нового Modbus устройства. Чтобы процесс добавления устройства полностью совпадал с текстом статьи, необходимо установить Rapid SCADA с конфигурацией по умолчанию.</p>

    <h2>Предварительная настройка базы конфигурации</h2>

    <p>Редактирование базы конфигурации выполняется с помощью программы Администратор.</p>

    <p>Запустите Администратор. Откройте таблицу <em>Объекты</em> и добавьте новую строку для объекта 2 "Тестовый объект" (рис. 1). Затем откройте таблицу <em>Линии связи</em> и добавьте линию 11 "Тестовая линия" (рис. 2). После чего откройте таблицу <em>КП</em> и добавьте КП 101 "Тестовый КП" (рис. 3).</p>

    <p>Для КП необходимо заполнить следующие поля (рис. 3):</p>

    <table class="sd-article-table">
        <tr>
            <td>Тип КП:</td>
            <td>Modbus</td>
        </tr>
        <tr>
            <td>Адрес:</td>
            <td>Modbus адрес Вашего устройства, например, 1</td>
        </tr>
        <tr>
            <td>Позывной:</td>
            <td>IP-адрес, если устройство подключено по сети Ethernet. В противном случае, пустой</td>
        </tr>
        <tr>
            <td>Линия связи:</td>
            <td>"Тестовая линия", которая была только что создана</td>
        </tr>
    </table>

    <p class="sd-article-image">
        <img src="modbus-protocol-files/modbus_table_obj_ru.png" alt="Добавление объекта" /><br />
        Рис. 1. Добавление объекта
    </p>

    <p class="sd-article-image">
        <img src="modbus-protocol-files/modbus_table_commline_ru.png" alt="Добавление линии связи" /><br />
        Рис. 2. Добавление линии связи
    </p>

    <p class="sd-article-image">
        <img src="modbus-protocol-files/modbus_table_kp_ru.png" alt="Добавление КП" /><br />
        Рис. 3. Добавление КП
    </p>

    <p>После того, как база конфигурации отредактирована, её необходимо передать Серверу, щёлкнув по кнопке <img src="../../common-images/pass.gif" />. Чтобы изменения вступили в силу, перезапустите службу Сервера с помощью кнопки <img src="../../common-images/restart_blue.gif" />.</p>

    <h2>Настройка обмена данными с устройствами</h2>

    <p>Запустите Коммуникатор (точнее его графическую оболочку). При этом служба Сервера должна быть запущена.</p>

    <p>Щёлкните правой кнопкой мыши по элементу дерева <em>Линии связи</em> и выберите в контекстном меню пункт <em>Импорт линий связи и КП</em> (рис. 4). В появившемся окне отметьте галочкой созданную линию связи и КП, после чего нажмите кнопку <em>Импорт</em> (рис. 5). Линия связи и КП появятся в Коммуникаторе.</p>

    <p class="sd-article-image">
        <img src="modbus-protocol-files/modbus_popup_commlines_ru.png" alt="Контекстное меню линий связи" /><br />
        Рис. 4. Контекстное меню линий связи
    </p>

    <p class="sd-article-image">
        <img src="modbus-protocol-files/modbus_import_ru.png" alt="Выбор импортируемых КП" /><br />
        Рис. 5. Выбор импортируемых КП
    </p>

    <p>Щёлкните в дереве по элементу Линия 11 "Тестовая линия" и на странице <em>Параметры линии связи</em> выберите и настройте канал связи, например, <em>Последовательный порт</em>. Поставьте галочку <em>Команды ТУ разрешены</em>, если необходимо управлять устройством (рис. 6).</p>

    <p class="sd-article-image">
        <img src="modbus-protocol-files/modbus_commline_ru.png" alt="Параметры линии связи" /><br />
        Рис. 6. Параметры линии связи
    </p>

    <p>Типичные параметры последовательного порта в зависимости от типа протокола Modbus содержатся в следующей таблице.</p>

    <table class="sd-article-table">
        <tr>
            <th>Modbus RTU</th>
            <th>Modbus ASCII</th>
            <th>Modbus TCP</th>
        </tr>
        <tr>
            <td>8 битов данных,<br />с проверкой чётности (even – чёт.),<br />1 стоп-бит</td>
            <td>7 битов данных,<br />с проверкой чётности (even – чёт.),<br />1 стоп-бит</td>
            <td>-</td>
        </tr>
        <tr>
            <td>8 битов данных,<br />без проверки чётности,<br />2 стоп-бита</td>
            <td>7 битов данных,<br />без проверки чётности,<br />2 стоп-бита</td>
            <td>-</td>
        </tr>
    </table>

    <p>В режимах RTU и ASCII необходимо установить одинаковую скорость передачи данных в Коммуникаторе и на устройствах. На одной линии связи все устройства должны работать по протоколу Modbus одного типа и с одной скоростью.</p>

    <p>Далее перейдите на страницу <em>Опрос КП</em> и выберите в таблице "Тестовый КП" (рис. 7). Если не указывать время или период опроса КП, то опрос устройств производится циклически. Команды отправляются сразу после завершения очередного опроса.</p>

    <p class="sd-article-image">
        <img src="modbus-protocol-files/modbus_request_ru.png" alt="Таблица опроса КП" /><br />
        Рис. 7. Таблица опроса КП
    </p>

    <p>Нажмите кнопку <img src="../../common-images/props.png" />, чтобы открыть форму настройки дополнительных свойств КП (рис. 8). На форме свойств КП необходимо выбрать тип протокола Modbus, который должен быть указан в документации на устройство.</p>

    <p class="sd-article-image">
        <img src="modbus-protocol-files/modbus_device_props_ru.png" alt="Свойства КП" /><br />
        Рис. 8. Свойства КП
    </p>

    <p>Нажмите кнопку <img src="../../common-images/open.png" />, чтобы выбрать существующий шаблон устройства, или кнопку <img src="../../common-images/blank.png" />, чтобы создать новый шаблон. При нажатии на кнопку создания <img src="../../common-images/blank.png" /> или на кнопку редактирования шаблона <img src="../../common-images/edit.png" /> вызывается <em>Редактор шаблонов устройств</em> (рис. 9). В данной статье используется существующий шаблон KpModbus_Adam6015.xml.</p>

    <p class="sd-article-image">
        <img src="modbus-protocol-files/modbus_template_ru.png" alt="Редактор шаблонов устройств" /><br />
        Рис. 9. Редактор шаблонов устройств
    </p>

    <p>Шаблон устройства отражает структуру пакетов данных протокола Modbus. Данные, запрашиваемые от устройства, объединены в группы элементов (тегов). Группа элементов описывается наименованием, таблицей данных, адресом и количеством элементов. Для команд, если они поддерживаются устройством, необходимо задать наименование, таблицу данных, адрес и номер команды КП (от 1 и далее по порядку).</p>

    <p>Наименования элементов и команд могут быть произвольными. Таблицы данных и адреса элементов должны содержаться в документации на подключаемое устройство. В зависимости от производителя адресация элементов может начинаться с 0 или с 1, указываться в 10-чной или 16-ричной системе. По умолчанию в шаблоне выбрана адресация с 1 в 10-чной системе. Чтобы переключить адресацию шаблона, нажмите на кнопку <img src="../../common-images/settings.png" />. Откроется диалоговое окно настроек шаблона (рис. 10).</p>

    <p class="sd-article-image">
        <img src="modbus-protocol-files/modbus_template_settings_ru.png" alt="Настройки шаблона" /><br />
        Рис. 10. Настройки шаблона
    </p>

    <p>Для сохранения настроек Коммуникатора нажмите кнопку <img src="../../common-images/apply.png" />. Теперь можно запустить службу Коммуникатора с помощью кнопки <img src="../../common-images/start.png" /> и проверить связь с устройством.</p>

    <p>Щёлкните элемент дерева КП 101 "Тестовый КП", чтобы проконтролировать состояние КП и наличие данных (рис. 11). Данные появятся не сразу после запуска, а после завершения первого опроса КП.</p>

    <p class="sd-article-image">
        <img src="modbus-protocol-files/modbus_data_ru.png" alt="Данные КП" /><br />
        Рис. 11. Данные КП
    </p>

    <p>При отсутствии связи с устройством используйте журнал линии связи для анализа причины проблемы. Чтобы открыть журнал, щёлкните по элементу дерева <em>Статистика линии связи</em> и перейдите на страницу <em>Журнал линии связи</em>. С помощью онлайн инструмента <a href="http://modbus.rapidscada.net/" target="_blank">Online Modbus Parser</a> можно получить расшифровку пакетов данных, скопировав их на веб-форму из журнала линии связи.</p>

    <h2>Завершение настройки базы конфигурации</h2>

    <p>После того, как связь с устройством установлена, необходимо создать входные каналы и каналы управления в базе конфигурации. Для этого необходимо вновь открыть программу Администратор.</p>

    <p>Сервис автоматического создания каналов поможет сэкономить время. Выберите в главном меню программы <em>Сервис &gt; Создание каналов</em>.</p>

    <p>На открывшейся форме (рис. 12) выберите в выпадающем списке "Тестовая линия", затем поставьте галочку напротив "Тестового КП", а также установите "Тестовый объект" в столбце <em>Объект</em>. Задайте параметры нумерации каналов, если хотите, чтобы создаваемые каналы имели удобные для работы номера. Нажмите сначала кнопку <em>Рассчитать номера каналов</em>, затем кнопку <em>Создать</em>.</p>

    <p class="sd-article-image">
        <img src="modbus-protocol-files/modbus_create_cnls_ru.png" alt="Создание каналов" /><br />
        Рис. 12. Создание каналов
    </p>

    <p>Каналы создаются автоматически на основе шаблона устройства, который был создан и назначен КП в предыдущем разделе статьи. Посмотреть созданные каналы можно, щёлкнув в Администраторе по элементу дерева <em>Входные каналы &gt; Тестовый КП</em> или <em>Каналы управления &gt; Тестовый КП</em>. Рекомендуется вручную заполнить поля <em>Величина</em> и <em>Размерность</em> для входных каналов и поле <em>Значения команды</em> для каналов управления. Однако в случае первого опыта это делать необязательно.</p>

    <p>Полезно понимать, что входные каналы привязываются к тегам КП с помощью поля <em>Сигнал</em>. Каналы управления привязываются к командам КП в соответствии с полем <em>Номер команды</em>.</p>

    <p>После того, как редактирование базы конфигурации завершено, следует нажать кнопку <img src="../../common-images/pass.gif" /> для передачи изменений Серверу, перезапустить Сервер и Коммуникатор с помощью кнопок <img src="../../common-images/restart_blue.gif" /> и <img src="../../common-images/restart_yellow.gif" />.</p>

    <p>Откройте страницу <em>Данные КП</em> в Коммуникаторе и убедитесь, что созданные входные каналы связаны с тегами КП – столбец <em>Канал</em> должен содержать номера созданных входных каналов (рис. 13).</p>

    <p class="sd-article-image">
        <img src="modbus-protocol-files/modbus_data_with_cnls_ru.png" alt="Данные КП с привязкой каналов" /><br />
        Рис. 13. Данные КП с привязкой каналов
    </p>

    <p>В результате проделанных действий данные должны собираться с устройства и сохраняться в архив. Осталось настроить пользовательский интерфейс оператора.</p>

    <h2>Настройка интерфейса оператора</h2>

    <p>Рассмотрим создание табличного представления для приложения Вебстанция. Для этого нам понадобится программа Редактор таблиц (если необходимо отобразить данные на мнемосхеме, то вместо редактора таблиц используйте Редактор схем).</p>

    <p>Откройте Редактор таблиц и заполните табличное представление, как показано на рис. 14. Добавить канал в таблицу (из левой части окна в правую) можно по кнопке <img src="../../common-images/plus.png" />, двойному щелчку на строке канала или по клавише Enter.</p>

    <p>Сохраните созданное табличное представление в файл с именем TestTable.tbl в папку C:\SCADA\Interface\Test. Обратите внимание, что имена папок и файлов представлений должны содержать только латинские символы.</p>

    <p class="sd-article-image">
        <img src="modbus-protocol-files/modbus_table_editor_ru.png" alt="Редактор таблиц" /><br />
        Рис. 14. Редактор таблиц
    </p>

    <p>Далее, чтобы табличное представление появилось в веб-приложении, его необходимо прописать в базе конфигурации в таблице <em>Интерфейс</em> с помощью программы Администратор, как показано на рис. 15.</p>

    <p class="sd-article-image">
        <img src="modbus-protocol-files/modbus_table_itf_ru.png" alt="Добавление представления в таблицу Интерфейс" /><br />
        Рис. 15. Добавление представления в таблицу Интерфейс
    </p>

    <p>Чтобы сделанные изменения вступили в силу, необходимо передать базу Серверу с помощью кнопки <img src="../../common-images/pass.gif" /> и перезапустить службу Сервера кнопкой <img src="../../common-images/restart_blue.gif" />.</p>

    <p>Теперь запустите браузер и введите адрес <a href="http://localhost/scada/" target="_blank">http://localhost/scada/</a>. На форме входа в систему используйте логин admin и пароль 12345 (рис. 16). Если настройка выполнена правильно, то после входа в систему Вам будет доступна таблица с получаемыми от устройства данными (рис. 17).</p>

    <p class="sd-article-image">
        <img src="modbus-protocol-files/modbus_web1_ru.png" alt="Вход в систему" /><br />
        Рис. 16. Вход в систему
    </p>

    <p class="sd-article-image">
        <img src="modbus-protocol-files/modbus_web2_ru.png" alt="Приложение Вебстанция" /><br />
        Рис. 17. Приложение Вебстанция
    </p>

    <h2>Преобразование значений тегов Modbus</h2>

    <p>Каждый элемент Modbus, относящийся к таблицам Input Register и Holding Registers, состоит из двух байт. В зависимости от установленного для элемента типа полученные от устройства данные преобразуются в значение по-разному.</p>

    <p>Если выбран 4-х байтный тип (uint, int, float), то значение элемента получается в результате преобразования 2-х элементов с идущими подряд адресами. Если выбран 8-и байтный тип (ulong, long, double), то значение получается в результате преобразования 4-х элементов.</p>

    <p>Кроме того, можно задать порядок байт, в котором зашифровано значение, т.к. для различных устройств порядок байт может отличаться.</p>

    <p>В ряде случаев для получения вещественных или отрицательных величин потребуется пересчёт, который выполняется Сервером.  Способ пересчёта зависит от используемого устройства и должен указываться его производителем. Два распространённых варианта пересчёта для 2-х байтных значений без знака (ushort) приводятся ниже.</p>

    <h3>Вариант 1. Пропорциональный пересчёт</h3>

    <p>Пусть требуемое вещественное значение изменяется в диапазоне от A до B, X - полученное от устройства целое значение. Тогда пересчёт выполняется по следующей формуле:</p>

    <p>X * (B - A) / 65536 + A.</p>

    <p>Формулу следует ввести в поле Формула входного канала в базе конфигурации, установив для данного канала признак Исп. формулу. Например, значение измеряемого параметра изменяется в диапазоне от -40 до 160. Тогда формула для ввода в базу конфигурации получится:</p>

    <p>Cnl*200/65536-40</p>

    <h3>Вариант 2. Использование дополнительного кода</h3>

    <p>Дополнительная информация о дополнительном коде (two’s complement) доступна на <a href="https://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4_(%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%B0)" target="_blank">Википедии</a>.</p>

    <p>Пусть требуемое вещественное значение изменяется в диапазоне от A до B. При этом нижней границе соответствует целое значение A', получаемое от устройства, верхней границе – целое значение B', получаемое от устройства, а нулевому вещественному значению соответствует 0, получаемый от устройства. Значения A' и B' устанавливаются производителем устройства.</p>

    <p>Если старший бит полученного значения X равен 0, т.е. X является положительным, то вещественное значение вычисляется по формуле:</p>

    <p>X * B / B'.</p>

    <p>Если старший бит полученного значения X равен 1, т.е. X является отрицательным, то вещественное значение вычисляется по формуле:</p>

    <p>(~X | 128 + 1) * A / (~A' | 128 + 1),<br />где ~ - оператор побитового отрицания, | - оператор побитового ИЛИ.</p>

    <p>Пример:<br />A = -210, A' = 56482 (0xDCA2), B = 760, B' = 32767 (0x7FFF).</p>

    <p>Тогда формула для ввода в базу конфигурации:<br />Cnl&lt;32768 ? Cnl*760/32767 : -(double)(ushort)(~(ushort)Cnl|128+1)*210/9182</p>

    <p>Рекомендуется создать функцию, выполняющую описанный пересчёт, в таблице <em>Формулы</em> базы конфигурации, чтобы сократить последующую запись формул при многократном использовании:</p>

    <pre>double Convert(double x)
{
    return x&lt;32768 ? x*760/32767 : -(double)(ushort)(~(ushort)x|128+1)*210/9182;
}</pre>

    <p>Вызов этой функции в поле <em>Формула</em> таблицы <em>Входные каналы</em>:<br />Convert(Cnl)</p>
</body>
</html>
